package com.resource.base;

import java.io.Serializable;

/**
 * <p>
 * 系统用户表
 * </p>
 *
 * @author hewei
 * @since 2020-11-26
 */
public class BaseDto implements Serializable {

    /**
     * 用户名
     */
    private Long id;

    /**
     * 用户名
     */
    private String userName;

    /**
     * 认证token
     */
    private String token;


    /**
     * 昵称
     */
    private String nickName;


    /**
     * 手机号
     */
    private String phone;

    public BaseDto(Builder builder) {
        this.id = builder.id;
        this.userName = builder.userName;
        this.nickName = builder.nickName;
        this.phone = builder.phone;
        this.token = builder.token;
    }

    public static class Builder {


        private Long id;
        private String userName;
        private String nickName;
        private String phone;
        private String token;

        /*
         * 非空属性，必须在构造器中指定。
         */
        public Builder() {
        }

        /*
         * name,sex,age可选择属性，提供特殊的setter方法。
         */
        public Builder id(Long id) {
            this.id = id;
            return this;
        }

        public Builder userName(String userName) {
            this.userName = userName;
            return this;
        }

        public Builder token(String token) {
            this.token = token;
            return this;
        }

        public Builder nickName(String nickName) {
            this.nickName = nickName;
            return this;
        }

        public Builder phone(String phone) {
            this.phone = phone;
            return this;
        }

        /*
         * Student对象创建器，想得到一个Student对象必须使用build 方法，
         * 在方法中增加对Builder参数的验证，并以异常的形式告诉给开发人员。
         */
        public BaseDto build() {
            /* 检查Builder对象中的数据是否合法。
             * 针对这个例子，就是检查主键冲突，外键制约等
             * 如果不满足我们可以抛出一个IllegalArgumentException
             */
            return new BaseDto(this);

        }

    }

    public String getToken() {
        return token;
    }

    public void setToken(String token) {
        this.token = token;
    }

    public Long getId() {
        return id;
    }

    public String getUserName() {
        return userName;
    }

    public String getNickName() {
        return nickName;
    }

    public String getPhone() {
        return phone;
    }
}
